Oracle 19C学习 您所在的位置:网站首页 group by 求总数oracle Oracle 19C学习

Oracle 19C学习

2024-02-18 02:34| 来源: 网络整理| 查看: 265

GROUP BY子句

将数据表中的行分成较小的组。

 

GROUP BY子句语法

 按照department_id进行分组,然后求每个部门的平均工资。

SELECT department_id, AVG(salary) FROM employees --先分组,再聚合 GROUP BY department_id ORDER BY department_id DEPARTMENT_ID AVG(SALARY) ------------- ----------- 10 4400 20 9500

 

按照多列分组: GROUP BY 字段1, 字段2

-- 先按照department_id进行分组,然后再对每个分组按照job_id再分组 SELECT department_id ,job_id, MAX(salary), AVG(salary) FROM employees GROUP BY department_id, job_id ORDER BY department_id /* 10 AD_ASST   4400 4400 20 MK_MAN  13000 13000 20 MK_REP  6000 6000 30 PU_CLERK   3100 2780 30 PU_MAN  11000 11000 */

 

非法查询范例

在SELECT语句中,除了聚合函数包含的列,其他的列必须出现在GROUP BY中。如果不在,则会出现聚合函数一个行与其他字段多行对应不上的情况,成为非法查询。

 

HAVING子句

当使用HAVING子句时,只显示与HAVING子句匹配的分组。

按照部门分组,查找出平均大于8000工资的部门,查看每个部门的人数是多少。

SELECT department_id, COUNT(last_name) FROM employees GROUP BY department_id HAVING AVG(salary) >= 8000 ORDER BY department_id; DEPARTMENT_ID COUNT(LAST_NAME) ------------- ---------------- 20 2 70 1 80 34 90 3 100 6 110 2

 

Having可以与WHERE同时出现。

WHERE先限制第一步筛选出来的记录,然后在进行分组,分组后在使用HAVING设定的条件提取出来符合条件的分组。

SELECT department_id, COUNT(last_name), job_id, AVG(salary) FROM employees WHERE job_id LIKE '%PROG' GROUP BY department_id, job_id HAVING AVG(salary) < 8000; DEPARTMENT_ID COUNT(LAST_NAME) JOB_ID AVG(SALARY) ------------- ---------------- ---------- ----------- 60 5 IT_PROG 5760

 

聚合函数的嵌套

计算出平均工资最高的那个部门。

 

 

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有